Para compilar el firmware de este teclado usamos lo siguiente:
Podemos usar dos comandos distintos para compilar y flashear el firmware (básicamente los dos hacen los mismo);
Al movernos a un commit antiguo podemos obtener un mensaje de submodulos de git no actualizados:
La etiqueta (nuevos commits) al lado de los cambios indica que es un submodulo de git, en este caso podemos borrar dichas carpetas y despues hacer un "git restore ."
Una vez hecho esto tendremos que lanzar el siguiente comando, para regenerar los submodulos:
make git-submodule
Una vez hecho esto al hacer "git status" deberíamos de tener el commit limpio sin ningún cambio.
A partir de aqui podemos guardar las configuraciones siguientes y hacer el flasheo del teclado.
En el archivo config.h que está dentro de la carpeta 5x6 ponemos la siguiente configuración para activar la iluminación LED en el teclado:
#define RGB_DI_PIN D3
#define RGBLED_NUM 7
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_LAYERS
#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
Y en el archivo rules.mk tenemos que tener la siguiente linea:
RGBLIGHT_ENABLE = yes
Para configurar las velocidades del raton editamos el archivo config.h dentro de la carpeta del teclado incluyendo lo siguiente al final:
//Lineal
#define MK_3_SPEED
#define MK_C_OFFSET_0 3
#define MK_C_OFFSET_1 7
#define MK_C_OFFSET_2 20
#define MK_C_INTERVAL_2 10
#define MK_W_OFFSET_0 1
#define MK_W_INTERVAL_0 100
#define MK_W_OFFSET_1 2
#define MK_W_INTERVAL_1 80
#define MK_W_OFFSET_2 6
#define MK_W_INTERVAL_2 5
//Aceleracion cuadratica
//#define MK_KINETIC_SPEED
//#define MOUSEKEY_DELAY 0
//#define MOUSEKEY_INTERVAL 16
//#define MOUSEKEY_MOVE_DELTA 4
//#define MOUSEKEY_INITIAL_SPEED 100
//#define MOUSEKEY_BASE_SPEED 100
//#define MOUSEKEY_DECELERATED_SPEED 400
//#define MOUSEKEY_ACCELERATED_SPEED 3000
//#define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 32
//#define MOUSEKEY_WHEEL_BASE_MOVEMENTS 42
//#define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48
//#define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8
Este archivo debe de estar colocado en: qmk_firmware/keyboards/handwired/dactyl_manuform/5x6/keymaps/Alfa-Omega/keymap.c
#include QMK_KEYBOARD_H
#define _KB 0
#define _NAV 1
#define _MOUSE 2
#define _GAMEMOD 3
#define _NUMBERS 4
#define _SYMBOLS 5
#define _MEDIA 6
#define VAL 140
#define SOFT_RED 0, 255, VAL
#define SOFT_GREEN 85, 255, VAL
#define SOFT_BLUE 170, 255, VAL
#define SOFT_PURPLE 191, 255, VAL
#define SOFT_YELLOW 43, 255, VAL
#define SOFT_ORANGE 21, 255, VAL
enum custom_keycodes {
MVKBD = SAFE_RANGE,
MVNAV,
MVMOUSE,
NAVBACK,
NAVFRNT,
SHDESK,
ALTWIN,
DESKGRID,
ALTTABR,
ALTTABL,
CRTTAB,
RUNTER,
RUNGB,
RUNCOM,
SOKEY,
SELECT,
CLIPB,
COPY,
PASTE,
CUTK,
UNDO,
DELETE,
CLOSETAB,
NEWTAB,
INCOG,
ALTF4,
RTAB,
APP1,
APP2,
APP3,
APP4,
APP5,
APP6,
APP7,
APPFOLDER,
BRWBAR,
DEV_EXP,
DEV_SEAR,
DEV_QUIT,
DEV_TAB,
DEV_RUN,
DEV_DEBUG,
DEV_STOP,
DEV_OVER,
DEV_INTO,
DEV_OUT,
DEV_SNPT,
DEV_FNC,
S_LANGBRT,
S_RANGBRT,
S_LCURLYBRT,
S_RCURLYBRT,
S_LSQBRT,
S_RSQBRT,
S_LPAREN,
S_RPAREN,
S_LQMARK,
S_RQMARK,
S_SLSH,
S_EQL,
S_QUOT,
S_AT,
S_ASTRK,
S_DOLLAR,
S_PERC,
S_HASTG,
S_ACFL,
S_AMP,
S_EXCL,
S_NFEM,
S_BSLSH,
S_VGL,
S_DIERE,
S_PIPE,
MIAU
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case MVKBD:
if (record->event.pressed) {
// when keycode is pressed
layer_move(0);
} else {
// when keycode is released
}
break;
case MVNAV:
if (record->event.pressed) {
layer_move(1);
} else {
}
break;
case MVMOUSE:
if (record->event.pressed) {
layer_move(_MOUSE);
} else {
}
break;
case NAVBACK:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_LEFT));
} else {
clear_keyboard();
}
break;
case NAVFRNT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_RIGHT));
} else {
clear_keyboard();
}
break;
case SHDESK:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_D));
} else {
clear_keyboard();
}
break;
case ALTWIN:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LALT) SS_DELAY(20) SS_TAP(X_TAB));
} else {
clear_keyboard();
}
break;
case DESKGRID:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_F8));
} else {
clear_keyboard();
}
break;
case ALTTABR:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_TAB));
} else {
clear_keyboard();
}
break;
case ALTTABL:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LSFT) SS_TAP(X_TAB));
} else {
clear_keyboard();
}
break;
case CRTTAB:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_T));
} else {
clear_keyboard();
}
break;
case RUNTER:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LALT) SS_DOWN(X_T));
} else {
clear_keyboard();
}
break;
case RUNGB:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LALT) SS_DOWN(X_B));
} else {
clear_keyboard();
}
break;
case RUNCOM:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_F2));
layer_move(0);
} else {
clear_keyboard();
}
break;
case SOKEY:
if (record->event.pressed) {
layer_move(0);
SEND_STRING(SS_DOWN(X_LGUI));
} else {
clear_keyboard();
}
break;
case SELECT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LSFT));
} else {
clear_keyboard();
}
break;
case CLIPB:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_V));
} else {
clear_keyboard();
}
break;
case COPY:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_C));
} else {
clear_keyboard();
}
break;
case PASTE:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_V));
} else {
clear_keyboard();
}
break;
case CUTK:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_X));
} else {
clear_keyboard();
}
break;
case UNDO:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_Z));
} else {
SEND_STRING(SS_UP(X_LCTL) SS_UP(X_Z));
}
break;
case DELETE:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_BSPC));
} else {
clear_keyboard();
layer_move(0);
}
break;
case CLOSETAB:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_W));
} else {
clear_keyboard();
}
break;
case NEWTAB:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_T));
} else {
clear_keyboard();
}
break;
case INCOG:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LSFT) SS_DOWN(X_N));
} else {
clear_keyboard();
}
break;
case ALTF4:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_F4));
} else {
clear_keyboard();
}
break;
case RTAB:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_TAB));
} else {
clear_keyboard();
}
break;
case APP1:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_1));
} else {
clear_keyboard();
}
break;
case APP2:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_2));
} else {
clear_keyboard();
}
break;
case APP3:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_3));
} else {
clear_keyboard();
}
break;
case APP4:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_4));
} else {
clear_keyboard();
}
break;
case APP5:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_5));
} else {
clear_keyboard();
}
break;
case APP6:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_6));
} else {
clear_keyboard();
}
break;
case APP7:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_7));
} else {
clear_keyboard();
}
break;
case APPFOLDER:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_E));
} else {
clear_keyboard();
}
break;
case BRWBAR:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_K));
} else {
clear_keyboard();
layer_move(0);
}
break;
case DEV_EXP:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LALT) SS_DOWN(X_L));
} else {
clear_keyboard();
}
break;
case DEV_SEAR:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_LBRC));
} else {
clear_keyboard();
}
break;
case DEV_QUIT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_F4));
} else {
clear_keyboard();
}
break;
case DEV_TAB:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_TAB));
} else {
clear_keyboard();
}
break;
case DEV_RUN:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_DOWN(X_F5));
} else {
clear_keyboard();
}
break;
case DEV_DEBUG:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_F5));
} else {
clear_keyboard();
}
break;
case DEV_STOP:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_F5));
} else {
clear_keyboard();
}
break;
case DEV_OVER:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_F10));
} else {
clear_keyboard();
}
break;
case DEV_INTO:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_F11));
} else {
clear_keyboard();
}
break;
case DEV_OUT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_F11));
} else {
clear_keyboard();
}
break;
case DEV_SNPT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_K) SS_TAP(X_X));
} else {
clear_keyboard();
}
break;
case DEV_FNC:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_F2));
SEND_STRING(SS_UP(X_LCTL));
SEND_STRING(SS_TAP(X_TAB) SS_TAP(X_TAB));
} else {
clear_keyboard();
}
break;
/*---------------SYMBOLS----------------*/
case S_RANGBRT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_NUBS));
} else {
clear_keyboard();
}
break;
case S_LCURLYBRT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_QUOT));
} else {
clear_keyboard();
}
break;
case S_RCURLYBRT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_BSLS));
} else {
clear_keyboard();
}
break;
case S_LSQBRT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_LBRC));
} else {
clear_keyboard();
}
break;
case S_RSQBRT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_RBRC));
} else {
clear_keyboard();
}
break;
case S_LPAREN:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_8));
} else {
clear_keyboard();
}
break;
case S_RPAREN:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_9));
} else {
clear_keyboard();
}
break;
case S_LQMARK:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_EQL));
} else {
clear_keyboard();
}
break;
case S_RQMARK:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_MINS));
} else {
clear_keyboard();
}
break;
case S_SLSH:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_7));
} else {
clear_keyboard();
}
break;
case S_EQL:
if (record->event.pressed) {
SEND_STRING(SS_UP(X_RALT));
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_0));
} else {
clear_keyboard();
}
break;
case S_QUOT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_2));
} else {
clear_keyboard();
}
break;
case S_AT:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_2));
} else {
clear_keyboard();
}
break;
case S_ASTRK:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_RBRC));
} else {
clear_keyboard();
}
break;
case S_DOLLAR:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_4));
} else {
clear_keyboard();
}
break;
case S_PERC:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_5));
} else {
clear_keyboard();
}
break;
case S_HASTG:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_3));
} else {
clear_keyboard();
}
break;
case S_ACFL:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_LBRC));
} else {
clear_keyboard();
}
break;
case S_AMP:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_6));
} else {
clear_keyboard();
}
break;
case S_EXCL:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_1));
} else {
clear_keyboard();
}
break;
case S_NFEM:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_GRV));
} else {
clear_keyboard();
}
break;
case S_BSLSH:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_GRV));
} else {
clear_keyboard();
}
break;
case S_VGL:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_4));
} else {
clear_keyboard();
}
break;
case S_DIERE:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_QUOT));
} else {
clear_keyboard();
}
break;
case S_PIPE:
if (record->event.pressed) {
SEND_STRING(SS_DOWN(X_RALT) SS_DOWN(X_1));
} else {
clear_keyboard();
}
break;
case MIAU:
if (record->event.pressed) {
SEND_STRING("Miau !!!");
} else {
clear_keyboard();
}
break;
}
return true;
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_KB] = LAYOUT_5x6(
MIAU, APP4, APPFOLDER, KC_COMM, KC_ESC, KC_VOLD, KC_VOLU, APP3, KC_DOT, KC_DEL, TG(_GAMEMOD), KC_PSCR,
SHDESK, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SLSH, KC_LCTL,
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, S_EQL, MVNAV, KC_SCLN, TG(_MEDIA),
KC_APP, KC_LGUI, MVMOUSE, KC_EQL,
KC_LSFT, KC_BSPC, KC_SPC, KC_ENT,
KC_LALT, KC_TAB, MO(_NUMBERS), MO(_SYMBOLS),
DESKGRID, RUNCOM, MVMOUSE, KC_RALT
),
[_NAV] = LAYOUT_5x6(
KC_NO, KC_TRNS, KC_TRNS, BRWBAR, KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, TG(_GAMEMOD), KC_PSCR,
SHDESK, ALTF4, CLOSETAB, ALTTABL, ALTTABR, NEWTAB, KC_NO, KC_NO, KC_UP, KC_PGUP, KC_NO, KC_NO,
KC_TRNS, ALTWIN, RTAB, KC_LCTL, KC_LSFT, KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, KC_TRNS,
KC_TRNS, UNDO, CUTK, COPY, PASTE, CLIPB, INCOG, KC_PGDN, KC_NO, KC_NO, KC_NO, TG(_MEDIA),
KC_APP, KC_LGUI, MVMOUSE, KC_NO,
MVKBD, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, MO(_NUMBERS), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_MOUSE] = LAYOUT_5x6(
QK_BOOT, KC_TRNS, KC_TRNS, BRWBAR, KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, TG(_GAMEMOD), KC_PSCR,
SHDESK, ALTF4, CLOSETAB, ALTTABL, ALTTABR, NEWTAB, KC_BTN2, KC_BTN1, KC_MS_U, KC_WH_U, KC_WH_R, KC_NO,
ALTWIN, KC_ACL0, KC_ACL1, KC_ACL2, KC_BTN1, KC_BTN2, KC_WBAK, KC_MS_L, KC_MS_D, KC_MS_R, KC_WFWD, KC_TRNS,
KC_NO, UNDO, CUTK, COPY, PASTE, CLIPB, KC_WH_L, KC_WH_D, KC_NO, MVNAV, KC_NO, TG(_MEDIA),
KC_APP, KC_LGUI, KC_NO, KC_NO,
MVKBD, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_NUMBERS] = LAYOUT_5x6(
KC_NO, KC_NO, KC_NO, KC_COMM, KC_NO, KC_NO, KC_NO, KC_NO, KC_DOT, KC_NO, KC_NO, KC_NO,
KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_7, KC_8, KC_9, KC_NO, KC_NO,
KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_NO, KC_LCTL,
KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_0, KC_1, KC_2, KC_3, KC_NO, KC_NO,
KC_NO, KC_LGUI, KC_NO, KC_NO,
MVKBD, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_SYMBOLS] = LAYOUT_5x6(
KC_NO, S_NFEM, KC_GRV, S_AT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, S_LQMARK, S_RQMARK, KC_NUBS, S_RANGBRT, S_EQL, S_DIERE, S_ACFL, S_LPAREN, S_RPAREN, S_VGL, KC_NO,
KC_NO, KC_RBRC, S_SLSH, S_LCURLYBRT, S_RCURLYBRT, S_DOLLAR, KC_LBRC, S_AMP, S_QUOT, KC_MINS, S_BSLSH, KC_LCTL,
KC_NO, KC_LBRC, S_ASTRK, S_LSQBRT, S_RSQBRT, S_PERC, KC_BSLS, S_HASTG, S_PIPE, S_EXCL, KC_NO, KC_NO,
KC_NO, KC_LGUI, KC_NO, KC_NO,
MVKBD, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[_GAMEMOD] = LAYOUT_5x6(
KC_NO, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_TRNS, KC_PSCR,
KC_T, KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO,
KC_G, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_UP, KC_NO,
KC_B, KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_N, KC_M, S_EQL, KC_SCLN, KC_DOWN, KC_RIGHT,
KC_NO, KC_NO, MVMOUSE, KC_LEFT,
KC_LSFT, KC_SPC, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, MO(_NUMBERS), KC_TRNS,
KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS
),
[_MEDIA] = LAYOUT_5x6(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_MFFD, KC_MRWD, KC_NO, KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO,
KC_NO, KC_NO, KC_MSTP, KC_MPRV, KC_MNXT, KC_NO, KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_RMOD, RGB_MOD, KC_NO, KC_NO, KC_TRNS,
KC_NO, KC_NO, KC_NO, KC_NO,
MVKBD, KC_MPLY, KC_TRNS, RGB_TOG,
KC_MSTP, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
const rgblight_segment_t PROGMEM nav_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{ 0, 7, SOFT_BLUE}
);
const rgblight_segment_t PROGMEM mouse_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{ 0, 7, SOFT_GREEN}
);
const rgblight_segment_t PROGMEM symbols_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{ 0, 7, SOFT_PURPLE}
);
const rgblight_segment_t PROGMEM numbers_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{ 0, 7, SOFT_YELLOW}
);
const rgblight_segment_t PROGMEM game_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{ 0, 2, SOFT_ORANGE},
{ 5, 2, SOFT_ORANGE}
);
const rgblight_segment_t PROGMEM media_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{ 6, 1, SOFT_RED}
);
const rgblight_segment_t PROGMEM caps_layer[] = RGBLIGHT_LAYER_SEGMENTS(
{ 0, 1, HSV_RED},
{ 1, 1, HSV_GREEN},
{ 2, 1, HSV_BLUE},
{ 3, 1, HSV_GOLD},
{ 4, 1, HSV_PURPLE},
{ 5, 1, HSV_GOLD},
{ 6, 1, HSV_PINK}
);
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
nav_layer,
mouse_layer,
symbols_layer,
numbers_layer,
media_layer,
game_layer,
caps_layer
);
void keyboard_post_init_user(void) {
rgblight_layers = my_rgb_layers;
}
bool led_update_user(led_t led_state) {
rgblight_set_layer_state(6, led_state.caps_lock);
return true;
}
layer_state_t default_layer_state_set_kb(layer_state_t state) {
rgblight_set_layer_state(2, layer_state_cmp(state, _KB));
return state;
}
layer_state_t layer_state_set_user(layer_state_t state) {
rgblight_set_layer_state(0, layer_state_cmp(state, _NAV));
rgblight_set_layer_state(1, layer_state_cmp(state, _MOUSE));
rgblight_set_layer_state(2, layer_state_cmp(state, _NUMBERS));
rgblight_set_layer_state(3, layer_state_cmp(state, _SYMBOLS));
rgblight_set_layer_state(4, layer_state_cmp(state, _MEDIA));
rgblight_set_layer_state(5, layer_state_cmp(state, _GAMEMOD));
return state;
}
QMK | Dactyl Manuform | keymap